package javase2.day05.demo02;
/*
多异常处理：
    1.多异常分别处理
    2.一次捕获，多次处理
    3.一次捕获，一次处理

 */
public class moreException {
    public static void main(String[] args) {
        System.out.println("第一种分别处理");
        //1.分别处理
        try {
        int[] a={1,2,3,4};
        System.out.println(a[4]);//java.lang.ArrayIndexOutOfBoundsException
        }catch (ArrayIndexOutOfBoundsException e){
            System.out.println(e);
        }
        try {
        int[] b=null;
        int length = b.length;
        System.out.println(length);//java.lang.NullPointerException
        }catch (NullPointerException e){
            System.out.println(e);
        }
        System.out.println("后续代码");
        System.out.println("-----------------------------------");


        /*
        2.一次捕获，多次处理
            注意事项：如果catch的异常变量具有父子类关系，那么子类必须在父类上边，否则就会报错
            例如：ArrayIndexOutOfBoundsException和IndexOutOfBoundsException是具有父子类关系的异常
                 子类就必须写在父类的上边
                 原因就是如果父类写在上边，不管捕获的什么异常，都会执行父类catch逻辑（多态），而子类异常变量使用不到
         */
        System.out.println("第二种一次捕获，多次处理");
        try {
            int[] a={1,2,3,4};
//            System.out.println(a[4]);//java.lang.ArrayIndexOutOfBoundsException

            int[] b=null;
            int length = b.length;
            System.out.println(length);//java.lang.NullPointerException
        }catch (ArrayIndexOutOfBoundsException e){
            System.out.println(e);
        }catch (NullPointerException e){
            System.out.println(e);
        }
        System.out.println("后续代码");
        System.out.println("------------------------");

        //3.一次捕获一次处理
        System.out.println("第三种一次捕获，一次处理");
        try {
            int[] a={1,2,3,4};
            System.out.println(a[4]);//java.lang.ArrayIndexOutOfBoundsException

            int[] b=null;
            int length = b.length;
            System.out.println(length);//java.lang.NullPointerException
        }catch (Exception e){
            System.out.println(e);
        }
        System.out.println("后续代码");
        System.out.println("------------------");

        /*
        运行期异常被抛出可以不处理，即不捕获也不声明抛出
        默认交给JVM处理，异常就中断程序，什么时候哦不抛出运行时异常，就继续执行程序
         */
        System.out.println("不捕获，不抛出，默认交给JVM");
        int[] a={1,2,3,4};
        System.out.println(a[4]);//java.lang.ArrayIndexOutOfBoundsException
        int[] b=null;
        int length = b.length;
        System.out.println(length);//java.lang.NullPointerException

        /*
第一种分别处理
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4
java.lang.ArrayIndexOutOfBoundsException: 4
	at javase2.day05.demo01.moreException.main(moreException.java:74)
java.lang.NullPointerException
后续代码
-----------------------------------
第二种一次捕获，多次处理
java.lang.NullPointerException
后续代码
------------------------
第三种一次捕获，一次处理
java.lang.ArrayIndexOutOfBoundsException: 4
后续代码
------------------
不捕获，不抛出，默认交给JVM
         */


    }
}
